package com.tarena.lbs.common.basic.converter;

import com.tarena.lbs.base.protocol.pager.BasePageList;
import com.tarena.lbs.base.protocol.pager.BasePageQuery;
import com.tarena.lbs.base.protocol.pager.PageResult;

import com.tarena.lbs.pojo.basic.bo.StoreBO;
import com.tarena.lbs.pojo.basic.dos.StoreDO;
import com.tarena.lbs.pojo.basic.param.StoreParam;
import com.tarena.lbs.pojo.basic.vo.StoreVO;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.beans.BeanUtils;
import org.springframework.data.elasticsearch.core.geo.GeoPoint;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

@Component
public class StoreConverter {

    public  StoreDO storeParamtoDo(StoreParam storeParam){
        StoreDO storeDO = paramo2do(storeParam);
        storeDO.setCreateTime(new Date());
        storeDO.setUpdateTime(storeDO.getCreateTime());
        storeDO.setStoreLatitude(storeParam.getLatitude());
        storeDO.setStoreLongitude(storeParam.getStoreLogo());
        GeoPoint geoPoint=
                new GeoPoint
                        (Double.valueOf(storeParam.getLatitude()),
                                Double.valueOf(storeParam.getLongitude()));
        storeDO.setLocation(geoPoint);
        return storeDO;
    }

    public PageResult<StoreVO> assemblePageVOS(BasePageList<StoreBO> bos,
        BasePageQuery query) {
        if (bos == null || bos.getTotal() == 0) {
            return null;
        }
        PageResult<StoreVO> result = new PageResult<>();
        List<StoreVO> vos = new ArrayList<>();
        for (StoreBO temp : bos.getList()) {
            StoreVO vo = new StoreVO();
            BeanUtils.copyProperties(temp,vo);
            vos.add(vo);
        }
        result.setTotal(bos.getTotal());
        result.setObjects(vos);
        result.setPageNo(query.getPageNo());
        result.setPageSize(query.getPageSize());
        return result;
    }

    public StoreVO bo2vo(StoreBO bo) {
        StoreVO storeVO = new StoreVO();
        BeanUtils.copyProperties(bo, storeVO);
        return storeVO;
    }

    public StoreVO doo2vo(StoreDO storeDO) {
        StoreVO storeVO = new StoreVO();
        BeanUtils.copyProperties(storeDO, storeVO);
        return storeVO;
    }

    public StoreDO paramo2do(StoreParam param) {
        StoreDO storeDO = new StoreDO();
        BeanUtils.copyProperties(param,storeDO);
        return storeDO;
    }


    public StoreDO param2DO(StoreParam param) {
        StoreDO storeDO = new StoreDO();
        BeanUtils.copyProperties(param, storeDO);
        Date date = new Date();
        storeDO.setCreateTime(date);
        storeDO.setUpdateTime(date);
        storeDO.setStoreLatitude(param.getLatitude());
        storeDO.setStoreLongitude(param.getLongitude());
        return storeDO;
    }


    public List<StoreBO> doList2boList(List<StoreDO> doList) {
        List<StoreBO> boList = new ArrayList<>();
        if (CollectionUtils.isEmpty(doList)) {
            return boList;
        }
        for (StoreDO storeDO : doList) {
            StoreBO storeBO = new StoreBO();
            BeanUtils.copyProperties(storeDO, storeBO);
            boList.add(storeBO);
        }
        return boList;
    }

    public List<StoreVO> boList2VOList(List<StoreBO> doList) {
        List<StoreVO> boList = new ArrayList<>();
        if (CollectionUtils.isEmpty(doList)) {
            return boList;
        }
        for (StoreBO storeBO : doList) {
            StoreVO storeVO = new StoreVO();
            BeanUtils.copyProperties(storeBO, storeVO);
            boList.add(storeVO);
        }
        return boList;
    }

    public StoreBO do2bo(StoreDO storeDO) {
        StoreBO storeBO = new StoreBO();
        BeanUtils.copyProperties(storeDO, storeBO);
        return storeBO;
    }


}
